#include <func.h>

int main()
{
    int fds[2];
    pipe(fds);
    pid_t pid = fork();
    if(pid > 0) {//父进程
        //打开一个文件，模拟传递的文件描述符
        int fd = open("file1.txt", O_RDONLY);
        printf("parent fd: %d\n", fd);
        close(fds[0]);//关闭读端
        //将fd通过管道传递给子进程
        write(fds[1], &fd, sizeof(fd));
        wait(NULL);
        close(fd);
    } else {
        //子进程
        close(fds[1]);//关闭写端
        int childfd = -1;
        //通过管道读取父进程传递过来的fd
        read(fds[0], &childfd, sizeof(childfd));
        printf("childfd %d, fds[0]: %d.\n", childfd, fds[0]);

        //通过childfd来读取文件file1.txt的内容
        char buff[100] = {0};
        //childfd是3，代表的是管道的读端，而
        //此时管道中没有数据，就阻塞了
        //
        //这意味着通过管道无法完成文件描述符的传递
        int ret = read(childfd, buff, sizeof(buff));
        if(ret < 0) {
            perror("read");
        }
        printf("child ret: %d\n", ret);
        printf("buff: %s\n", buff);
    }

    return 0;
}

